package com.hmkj.core.service.user;

import com.hmkj.common.entity.dtgrid.DtGrid;
import com.hmkj.core.model.user.UserModel;
import com.hmkj.core.po.system.Admin;
import com.hmkj.core.po.user.User;
import com.hmkj.core.service.base.GenericService;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;

/**
 * 用户表业务相关Service接口<br>
 *
 * @author donfy
 * @ClassName: UserService
 * @date 2017-08-25 04:51:01
 */
public interface UserService extends GenericService<Integer, User> {

    /**
     * 重置密码
     *
     * @param id
     */
    void resetPwd(Integer id);

    /**
     * 添加代理商
     *
     * @param user
     * @throws Exception
     */
    void addAdminAgent(User user) throws Exception;

    /**
     * 利润分成报表
     */
    DtGrid getProfitReportl(DtGrid dtGrid, Admin admin) throws Exception;

    /**
     * 注册接口
     *
     * @param model 页面传入参数
     * @return 完成注册用户
     */
    void doRegister(UserModel model);

    /**
     * 查询第 N 级的好友人数
     *
     * @param code  用户节点标识 如果为空 则查询第一级用户数量
     * @param level 查询的层级（层级为0则查询所有层级的伙伴总数）
     * @return
     */
    Integer countPartnerByLevel(String code, int level);

    /**
     * 查询第 N 级的好友人数
     *
     * @param code  用户节点标识 如果为空 则查询第一级用户数量
     * @param level 查询的层级（层级为0则查询所有层级的伙伴总数）
     * @return
     */
    List<User> listPartnerByLevel(String code, int level);

    /**
     * 修改用户邮箱，更改UserIdentify邮箱绑定状态
     *
     * @param user
     * @param email
     */
    void updateUserToBandingMailbox(User user, String email);

    /**
     * 根据邀请码查询用户
     *
     * @param inviteCode 邀请码
     * @return
     */
    User selectByInviteCode(String inviteCode);

    /**
     * 根据手机号查询用户
     *
     * @param  mobile 手机号码
     * @return
     */
    User selectByMobile(String mobile);

    /**
     * 修改用户手机号
     *
     * @param userId             用户id
     * @param newUserMobilePhone 新手机号
     */
    void updateUserMobile(Integer userId, String newUserMobilePhone);

    /**
     * 实名认证
     *
     * @param user 用户
     */
    User realName(User user);


    /**
     * 前台用户登录
     *
     * @param model
     * @return
     */
    User doLogin(UserModel model, HttpServletRequest request);


    /**
     * 修改邀请人
     *
     * @param id       当前用户id
     * @param inviteId 修改的邀请人id
     * @throws Exception
     */
    void editInvestor(Integer id, Integer inviteId) throws Exception;
}
